lexer grammar lexerFLEX;

options {
  language = Java;
}

 
@header {
package PL.p5;
}

@rulecatch { catch (RecognitionException e) {
  throw e;}
  }

  VOID: 'void';
  MAIN: 'main';
  RETURN: 'return';
  
  fragment CHAR: 'char';
  fragment INT: 'int'; 
  TIPO: (CHAR | INT); 

  MAS: '+';
  MENOS: '-';
  ASTERISCO: '*';
  BARRA: '/';
  INCREMENTO: MAS MAS;
  DECREMENTO: MENOS MENOS;
  IGUAL: '=';
  COMA: ',';
  PUNTOYCOMA: ';';
  ACORCHETE: '[';
  CCORCHETE:']';
  APARENTESIS: '(';
  CPARENTESIS:')';
  ALLAVE: '{';
  CLLAVE: '}';
  AMPERSAND: '&';
  COMPARADOR: '<' | '>' | '<=' | '>=';
  OR: '|';
  PORCENTAJE: '%';
  fragment COMILLAS: '"';
    
  fragment ESPACIO: (' ');
  fragment NUEVA_LINEA: ('\r\n'|'\n');
  BLANCO: (ESPACIO|'\t'|'\r'|NUEVA_LINEA) {$channel = HIDDEN;}; 
  
  fragment LETRA : ('a'..'z')| ('A'..'Z')|'_'; 
  IDENT: LETRA (DIGITO|LETRA)*;
  CALLIDENT: ALLAVE IDENT CLLAVE;
  
  fragment DIGITO : '0'..'9'; 
  NUMERO : (DIGITO)+;
  
  RANGO: (DIGITO|LETRA) '-' (DIGITO|LETRA);
  
  CADENA: COMILLAS (~(COMILLAS))* COMILLAS;
  
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{$channel = HIDDEN;};
  LINEA_COMENTARIO: BARRA BARRA (.)* NUEVA_LINEA {$channel = HIDDEN;};